Ana içeriğe geç

Depolama Uygulamaları

Scilla, akıllı sözleşme geliştirmek için kullanılan bir dildir ve bu nedenle bir depolama uygulaması yazmak için kullanılabilir. Depolama uygulaması, kullanıcıların verilerini güvenli bir şekilde saklayabilecekleri ve yönetebilecekleri bir platform sağlar. Bu tür bir uygulamanın Scilla ile nasıl yazılacağını aşağıda açıklıyorum.

Öncelikle, Scilla dilinde bir sözleşme oluşturmanız gerekiyor. Bu sözleşmede, kullanıcıların verilerini saklayacakları bir yer olarak bir depolama alanı tanımlayabilirsiniz. Ayrıca, kullanıcılardan gelen verileri doğrulamak için bir işlev de eklemeniz gerekir.

Aşağıdaki kod örneği, kullanıcıların bir depolama alanına metin verileri eklemelerine ve görüntülemelerine izin veren basit bir Scilla sözleşmesi göstermektedir:

(* @version 0.0.1 *)

contract StorageApp {

(* storage *)
var data: Map (Uint32, String)

(* entrypoints *)
transition addData(index: Uint32, value: String)
is_owner() {
data[index] := value
}

query getData(index: Uint32)
returns (result: Option(String)) {
let value = data[index]
match value with
| Some(v) =>
result := Some(v)
| None =>
result := None
end
}

(* helpers *)
function is_owner() : Bool {
match tx.sender with
| Call({address=this_address}) =>
if (this_address == tx.origin)
true
else
false
| _ => false
end
}
}

Bu sözleşme, kullanıcılara yönelik iki işlev içerir: addData ve getData. addData, kullanıcının depolama alanına yeni bir veri eklemesine izin verir. getData ise, depolama alanından belirli bir veriyi almak için kullanılır.

Sözleşmede, kullanıcının yalnızca kendisi veri ekleyebilmesi için is_owner adlı bir yardımcı işlev de tanımlanmıştır. Bu işlev, bir çağrının kaynağı olarak orijinal adresi doğrulamak için kullanılır.

Sonuç olarak, Scilla dilinde bir depolama uygulaması geliştirmek oldukça kolaydır. Yukarıdaki örnekte olduğu gibi, bir depolama alanı tanımlayabilir, veri ekleme ve alma işlevleri ekleyebilir ve kullanıcıların verilerini doğrulamak için yardımcı işlevler yazabilirsiniz.

Maliyet Paylaşımı Uygulamaları

Scilla, akıllı sözleşmeler oluşturmak için kullanılan bir dildir ve Maliyet Paylaşımı Uygulaması da bu amaçla kullanılabilir. Maliyet paylaşımı uygulaması, özellikle ortak projelerde harcamaların nasıl paylaşılacağına ilişkin anlaşmazlıkları önlemek için tasarlanmıştır.

Aşağıdaki Scilla kodu örneği, bir maliyet paylaşımı uygulamasını tanımlamaktadır:

(* @version 0.0.1 *)

contract CostSharingApp {

(* storage *)
var totalCost: Uint128
var participants: List ByStr20
var shares: Map ByStr20 Uint128

(* entrypoints *)
transition addParticipant(addr: ByStr20)
is_owner() {
participants := addr :: participants;
}

transition setShare(addr: ByStr20, share: Uint128)
is_owner() {
shares[addr] := share;
}

transition calculateShares(cost: Uint128)
is_owner() {
totalCost := cost;
let numParticipants = List.length(participants);

if (numParticipants > 0) {
let totalShares = List.fold_left(
fun(acc: Uint128, participant: ByStr20) =>
acc + shares[participant],
Uint128(0),
participants
);

let remainder = totalCost % Uint128(numParticipants);
let perPersonCost = (totalCost - remainder) / Uint128(numParticipants);

List.iteri(
fun(index: Uint32, participant: ByStr20) =>
let participantCost = perPersonCost + shares[participant];
Call(
participant,
fun (c: Contract CostSharingApp) =>
c.payShare()
) with
Some(participantCost)
end,
participants
);
}
}

transition payShare() {
let shareOpt = shares[tx.sender];
match shareOpt with
| Some(share) =>
let amt = Amount;
if (amt >= share)
Transfer(tx.origin, tx.sender, share)
end
| None =>
()
end
}

(* helpers *)
function is_owner() : Bool {
match tx.sender with
| Call({address=this_address}) =>
if (this_address == tx.origin)
true
else
false
| _ =>
false
end
}
}

Bu sözleşme, addParticipant, setShare ve calculateShares adlı üç işlem içerir. addParticipant, kullanıcının bir katılımcı olarak eklenmesine izin verirken, setShare işlemi bir kullanıcının maliyet paylaşımındaki payını belirler.

calculateShares ise, toplam maliyeti alır ve her bir katılımcının ödemesi gereken miktarı hesaplar. Ardından, payShare işlevi, bir kullanıcının payını ödeyeceği anlamına gelir. Bu işlev, sözleşmenin sahibi tarafından çağrılacaktır.

Sözleşme ayrıca, diğer katılımcıların ödemelerini kabul etmek için payShare işlevini içerir. Bu işlem, katılımcıların ödeme yapmasına izin verir ve sözleşmedeki paylarına göre doğru miktarda ödeme yapar.

Sonuç olarak, yukarıdaki Scilla kodu örneği, bir maliyet paylaşımı uygulaması geliştirmek için kullanılabilir. Bu uygulama, harcamaların nasıl paylaşılacağına ilişkin anlaşmazlıkları önlemek için idealdir.